Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dispatch beforetoggle & toggle events during dialog open/close/showModal #10091

Merged

Conversation

keithamus
Copy link
Contributor

@keithamus keithamus commented Jan 25, 2024

This attempts to fix #9733 by specifying that:

  • a Dialog's show() steps should dispatch a beforetoggle cancellable event.
  • followed by a queuing a non-cancellable toggle event.
  • a Dialog's showModal() steps should dispatch a beforetoggle cancellable event.
  • followed by a queuing non-cancellable toggle event.
  • the close the dialog steps should disaptch a non-cancellable beforetoggle event.
  • followed by queuing a non-cancellable toggle event.

(See WHATWG Working Mode: Changes for more details.)


/interactive-elements.html ( diff )

@josepharhar
Copy link
Contributor

I think this needs the "toggle task tracker" concept used in details elements in order to coalesce async toggle events: https://html.spec.whatwg.org/multipage/interactive-elements.html#queue-a-details-toggle-event-task

If you do this and open+close the dialog element synchronously , there should be one "toggle" event with both oldState and newState set to "closed":

dialog.showModal();
dialog.close();

@josepharhar
Copy link
Contributor

Consider chrome as tentatively interested. I will file an intent to ship to get an official position when this gets a bit more attention from the other browsers, but I don't anticipate objections

@smaug----
Copy link

Also Gecko is interested assuming the pr follows what was discussed at TPAC.

@josepharhar
Copy link
Contributor

Tests can be added to the OP: web-platform-tests/wpt#44208

@keithamus keithamus marked this pull request as ready for review February 8, 2024 21:31
@marco-prontera
Copy link

Hi, this implementation could help us improve a popup, such as a CMP, for better integration by utilizing native browser APIs, specifically the Popover API, to make everything more robust. This will enable us to further improve the INP impact, as described in my case study here: https://web.dev/case-studies/pubconsent-inp?hl=en. Since the CMP is a predominant component on the web, I believe this kind of implementation should be supported as much as possible. I hope it helps. Thank you

@keithamus
Copy link
Contributor Author

@annevk would you have time to review this or otherwise delegate it out to another editor for review?

Copy link
Member

@annevk annevk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe @nt1m or @josepharhar is interested in reviewing this?

source Outdated
Comment on lines 61002 to 61005
<li><p>Set <var>element</var>'s <span>dialog toggle task tracker</span> to a struct with <span
data-x="toggle-task-task">task</span> set to the just-queued <span
data-x="concept-task">task</span> and <span data-x="toggle-task-old-state">old state</span> set
to <var>oldState</var>.</p></li>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just-queued is a lil vague. But I guess we have no alternative?

Copy link
Contributor Author

@keithamus keithamus Oct 13, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I cribbed this from the popover part of the spec which does the same thing. Happy to look at alternatives.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah if all the task queueing algorithms returned the task they create then this would be better. Maybe that could be done as a follow up and we could fix up this part and the identical popover one?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Either that or create the task ahead-of-time. Not sure what is better, but a follow-up issue seems reasonable.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I will work on a follow up PR to fix both callsites.

source Outdated Show resolved Hide resolved
source Outdated Show resolved Hide resolved
source Outdated Show resolved Hide resolved
source Outdated Show resolved Hide resolved
source Outdated Show resolved Hide resolved
source Outdated Show resolved Hide resolved
source Outdated Show resolved Hide resolved
moz-wptsync-bot pushed a commit to web-platform-tests/wpt that referenced this pull request Oct 14, 2024
whatwg/html#10091

This also slightly refactors FireToggleEvent to allow to to
accomodate both popovers and now also dialogs

Differential Revision: https://phabricator.services.mozilla.com/D225449

bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1876762
gecko-commit: a8b51403fa4f1dd6d936826f2a5b14c670426f3d
gecko-reviewers: smaug
moz-v2v-gh pushed a commit to mozilla/gecko-dev that referenced this pull request Oct 15, 2024
…e r=smaug

whatwg/html#10091

This also slightly refactors FireToggleEvent to allow to to
accomodate both popovers and now also dialogs

Differential Revision: https://phabricator.services.mozilla.com/D225449
moz-wptsync-bot pushed a commit to web-platform-tests/wpt that referenced this pull request Oct 15, 2024
whatwg/html#10091

This also slightly refactors FireToggleEvent to allow to to
accomodate both popovers and now also dialogs

Differential Revision: https://phabricator.services.mozilla.com/D225449

bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1876762
gecko-commit: a8b51403fa4f1dd6d936826f2a5b14c670426f3d
gecko-reviewers: smaug
gecko-dev-updater pushed a commit to marco-c/gecko-dev-comments-removed that referenced this pull request Oct 15, 2024
…e r=smaug

whatwg/html#10091

This also slightly refactors FireToggleEvent to allow to to
accomodate both popovers and now also dialogs

Differential Revision: https://phabricator.services.mozilla.com/D225449

UltraBlame original commit: a8b51403fa4f1dd6d936826f2a5b14c670426f3d
gecko-dev-updater pushed a commit to marco-c/gecko-dev-wordified that referenced this pull request Oct 15, 2024
…e r=smaug

whatwg/html#10091

This also slightly refactors FireToggleEvent to allow to to
accomodate both popovers and now also dialogs

Differential Revision: https://phabricator.services.mozilla.com/D225449

UltraBlame original commit: a8b51403fa4f1dd6d936826f2a5b14c670426f3d
gecko-dev-updater pushed a commit to marco-c/gecko-dev-wordified-and-comments-removed that referenced this pull request Oct 15, 2024
…e r=smaug

whatwg/html#10091

This also slightly refactors FireToggleEvent to allow to to
accomodate both popovers and now also dialogs

Differential Revision: https://phabricator.services.mozilla.com/D225449

UltraBlame original commit: a8b51403fa4f1dd6d936826f2a5b14c670426f3d
source Outdated Show resolved Hide resolved
@josepharhar
Copy link
Contributor

lgtm, I don't see any differences between this spec and the chromium implementation

@keithamus
Copy link
Contributor Author

I wonder if one of the editors would like to review this, given it'll be shipping in 2 browsers very soon? Perhaps @foolip, @domfarolino or @zcorpan?

Copy link
Member

@annevk annevk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good. Please double check the wrapping (fixup commit preferred) and the follow-up issue.

source Outdated
Comment on lines 61002 to 61005
<li><p>Set <var>element</var>'s <span>dialog toggle task tracker</span> to a struct with <span
data-x="toggle-task-task">task</span> set to the just-queued <span
data-x="concept-task">task</span> and <span data-x="toggle-task-old-state">old state</span> set
to <var>oldState</var>.</p></li>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Either that or create the task ahead-of-time. Not sure what is better, but a follow-up issue seems reasonable.

source Outdated Show resolved Hide resolved
source Outdated Show resolved Hide resolved
@keithamus keithamus force-pushed the dispatch-toggleevents-for-dialog-open-close branch from 2a3abd6 to b666d93 Compare November 4, 2024 14:25
Copy link
Member

@annevk annevk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Further nits as it went wrong.

source Show resolved Hide resolved
source Show resolved Hide resolved
source Show resolved Hide resolved
source Outdated Show resolved Hide resolved
source Show resolved Hide resolved
source Show resolved Hide resolved
@annevk annevk merged commit 0511ae0 into whatwg:main Nov 5, 2024
2 checks passed
@keithamus keithamus deleted the dispatch-toggleevents-for-dialog-open-close branch November 5, 2024 15:27
AtkinsSJ added a commit to AtkinsSJ/ladybird that referenced this pull request Nov 8, 2024
AtkinsSJ added a commit to AtkinsSJ/ladybird that referenced this pull request Nov 8, 2024
AtkinsSJ added a commit to AtkinsSJ/ladybird that referenced this pull request Nov 8, 2024
awesomekling pushed a commit to LadybirdBrowser/ladybird that referenced this pull request Nov 9, 2024
nico pushed a commit to nico/serenity that referenced this pull request Nov 12, 2024
Corresponds to whatwg/html#10091

(cherry picked from commit 36f8dfaed02a967de620a7e2abc8bd254cd7f9a5)
nico pushed a commit to nico/serenity that referenced this pull request Nov 12, 2024
Corresponds to whatwg/html#10091

(cherry picked from commit 36f8dfaed02a967de620a7e2abc8bd254cd7f9a5)
nico pushed a commit to SerenityOS/serenity that referenced this pull request Nov 12, 2024
Corresponds to whatwg/html#10091

(cherry picked from commit 36f8dfaed02a967de620a7e2abc8bd254cd7f9a5)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

Add ToggleEvents to <dialog>.showModal()
5 participants